Skip to content

fix: ensure that a CCCD is only create once for a characteristic - #128

Open
tauu wants to merge 1 commit into
go-ble:masterfrom
tauu:fix-single-cccd
Open

fix: ensure that a CCCD is only create once for a characteristic#128
tauu wants to merge 1 commit into
go-ble:masterfrom
tauu:fix-single-cccd

Conversation

@tauu

@tauu tauu commented Jun 7, 2026

Copy link
Copy Markdown

This PR fixes an issue where multiple CCCDs are created for a characteristic which is not allowed according to the bluetooth specs and break notify / indicate handling on some platforms (e.g. WebBluetooth in Chrome).

The error occurs when AddService(...) is called multiple times in a row, as for each call a new database is created. This in turn will create the attributes for each service (also already added ones). During the attribute creation a CCCD is created when a characteristic has a notify or indicate handler and it is added to the datastructure of the characteristic. During that it is not checked if the characteristic already has a CCCD. Therefore a characteristic ends up with multiple CCCDs if attributes for it are created more than once.

The PR fixes this by first checking if a CCCD already exists.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant